package com.hymall.controller.admin;


import com.hymall.bean.MarketRole;
import com.hymall.bean.bo.PermissionsPostBo;
import com.hymall.bean.common.BasePageInfo;
import com.hymall.bean.common.BaseRespVo;
import com.hymall.bean.common.CommonData;
import com.hymall.bean.vo.PermissionsVo;
import com.hymall.service.admin.AdminService;
import com.hymall.service.admin.PermissionsService;
import com.hymall.service.admin.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author: 叶熠彬
 * @description: 系统管理 -> 角色管理
 * @date: 2022/7/16 7:52
 */
@RestController
@RequestMapping("admin/role")
public class AdminRoleController {

    @Autowired
    RoleService roleService;

    @Autowired
    PermissionsService permissionsService;

    /**
     * 管理员页面显示角色选项信息
     *
     * @author: 叶熠彬
     * @date: 2022/7/16 18:58
     * @param: []
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @GetMapping("options")
    public BaseRespVo options() {
        CommonData data = roleService.queryRoleOption();
        return BaseRespVo.ok(data);
    }

    /**
     * 系统管理 -> 管理员账号页面显示角色信息
     *
     * @author: 叶熠彬
     * @date: 2022/7/16 23:09
     * @param: [name, info]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @GetMapping("list")
    public BaseRespVo list(String name, BasePageInfo info) {
        CommonData data = roleService.queryRoleList(name, info);
        return BaseRespVo.ok(data);
    }

    /**
     *
     * 系统管理 -> 角色管理页面 -> 查看详细权限信息
     *
     * @author: 叶熠彬
     * @date: 2022/7/16 23:59
     * @param: [roleId]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @GetMapping("permissions")
    public BaseRespVo permissions(int roleId) {
        PermissionsVo data = permissionsService.queryPermissions(roleId);
        return BaseRespVo.ok(data);
    }

    /**
     * 系统管理 -> 角色管理页面 -> 授权
     *
     * @author: 叶熠彬
     * @date: 2022/7/18 8:58
     * @param: [bo]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @PostMapping("permissions")
    public BaseRespVo permissions(@RequestBody PermissionsPostBo bo) {
        if (bo.getRoleId() == 1) {
            return BaseRespVo.invalidParameter("超级管理员权限不可更改");
        }
        int code = permissionsService.updatePermissions(bo);
        if (code == 200) {
            return BaseRespVo.ok();
        }
        return BaseRespVo.invalidData();
    }

    /**
     * 创建角色
     *
     * @author: 叶熠彬
     * @date: 2022/7/17 20:49
     * @param: [role]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @PostMapping("create")
    public BaseRespVo create(@RequestBody MarketRole role) {
        if (role.getName().length() < 5) {
            return BaseRespVo.invalidParameter("角色名称过短");
        }
        int code = roleService.addRole(role);
        if (code == 201) {
            return BaseRespVo.error(201, "该角色已存在");
        }
        if (code == 200) {
            return BaseRespVo.ok(role);
        }
        return BaseRespVo.invalidData();
    }

    /**
     * 更新角色信息
     *
     * @author: 叶熠彬
     * @date: 2022/7/17 20:54
     * @param: [role]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @PostMapping("update")
    public BaseRespVo update(@RequestBody MarketRole role) {
        int code = roleService.updateRole(role);
        if (code == 200) {
            return BaseRespVo.ok();
        }
        if (code == 201) {
            return BaseRespVo.error(201, "该角色已存在");
        }
        return BaseRespVo.invalidData();
    }

    /**
     * 删除角色信息，deleted设置为true
     *
     *
     * @author: 叶熠彬
     * @date: 2022/7/17 21:16
     * @param: [role]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @PostMapping("delete")
    public BaseRespVo delete(@RequestBody MarketRole role) {
        int code = roleService.deleteRole(role);
        if (code == 200) {
            return BaseRespVo.ok();
        }
        return BaseRespVo.invalidData();
    }


}
